– Introducción a R - Manejar Datos –
“Herramientas de análisis cuantitativo y su aplicación en la
conservación de la biodiversidad”
“Herramientas de análisis cuantitativo y su aplicación en la
conservación de la biodiversidad”
Este taller ha sido desarrollado por:
- Keyvette Tabb (University of Southern California)
- Prof. Melissa Guzmán (University of Southern California).
- Juan Zuloaga director de Ecodiversa Tropical.
1. Objetivos de Aprendizaje
Al final de este taller, podrás aprender cómo:
- Agrupar y resumir datos usando el paquete
dplyr. - Usar las funciones
mutate(),filter(),select(),group_by()ysummarise()del paquete “dplyr” para modificar estructuras de datos. - Usar las funciones
group_by()ysummarise()para analizar estructuras de datos. - Cargar datos en varios formatos.
- Usar las funciones
pivot_longer()ypivot_wider()del paquetetidyrpara modificar la disposición de estructuras de datos. Usar las funcionesstr_replace()ystr_remove()del paquetestringrpara manipular caracteres en estructuras de datos.
2. Para Empezar
¿Qué es necesario para limpiar datos en R y por que es importante?
En el taller de visualización, hablamos sobre la importancia de crear gráficos que resuenen con tu audiencia y reflejen tu mensaje deseado. Ahora que sabemos cómo lograr esto, es importante aprender a manipular datos para reflejar nuestro mensaje deseado.
Los datos vienen en muchos tipos de formas y lo que es útil o práctico para una aplicación no necesariamente funcionaría para otra. R tiene requisitos específicos sobre la configuración y los tipos de datos que se pueden pasar entre las funciones. Entonces, es muy importante tener la habilidad de manipular tus datos y darles la forma necesaria. Algunas de las funciones de las que hablaremos en este taller tienen el poder de manipular estructuras de datos mediante filtrado, reorganización y acomodo de caracteres.
¿Qué es necesario para manipular datos en R?
Ahora, vamos a instalar los paquetes que vamos a usar en este taller.
Para empezar, vamos a instalar los paquetes dplyr,
tidyr y stringr. Solo es necesario hacer esto
una vez, ya que los paquetes se guardarán automáticamente en la sección
“Packages” en RStudio. Los paquetes te dan acceso a todas las funciones
creadas por el usuario y se pueden instalar usando la siguiente línea de
código:
Cuando los paquetes terminen de instalarse, aparecerá un mensaje indicando que los paquetes fueron instalados con éxito!
3. dplyr
dplyr es un paquete útil para reorganizar, modificar y
manipular datos. Es posible que utilices este paquete con frecuencia en
sus proyectos. Por favor, carga este paquete en R usando
library(). Ahora, vamos a hablar de cinco funciones
específicas en el paquete dplyr: filter(),
mutate(), select(), group_by() y
summarise().
Tips!
Recuerda que cada vez que abras R de nuevo y desees utilizar el
paquete dplyr, debes cargarlo usando la función
library().
Sin embargo, antes de adentrarnos en los detalles de cómo aplicar estas funciones, necesitamos una base de datos. En este caso, nuestra estructura de datos se llama “butterfly” y contiene datos cualitativos de una población de mariposas atlánticas en Brazil Pereira et al. 2018.
En preparación para los ejemplos siguientes, por favor carga los datos “ATLANTIC_BUTTERFLIES_sites.csv” en R y asígnalos a un objeto con el nombre “butterfly”.
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
3.1 dplyr::filter() - filtrando datos basado en criteros
Una de las funciones más útiles de dplyr es filter().
Con esta función, es posible filtrar observaciones específicas basándose
en las entradas en una o más columnas.
La base de datos nos muestra la columna “número de sitio” (sites_ID) tiene varios tipos diferentes de “números de sitio”.
¿Qué pasaría si quisiéramos crear una estructura de datos que solo incluya las observaciones del sitio “bor1001”?
Esto es cuando utilizaríamos la función filter() en la
siguiente línea de código:
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
Además, es posible filtrar observaciones numéricamente. Por ejemplo, para obtener una estructura de datos que contenga todos los sitios donde la precipitación fué de más de 1000 mm de lluvia. Para esoto utilizaremos la siguiente línea de código. Presta atención a que cuando filtras por número, no es necesario poner comillas al número.
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
Finalmente, es posible usar un número infinito de condiciones para filtrar la estructura de datos, todo dentro de la misma línea de código. Por ejemplo, si quisieras crear una estructura de datos que contenga solamente los sitios en Río de Janeiro donde cayó más de 1000 mm de lluvia, usarías esta línea de código:
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1018 | Brazil | RIO DE JANEIRO | ITATIAIA | Paque Nacional do Itatiaia | -22.375278 | -44.662222 | 9000 | 28086.06751 | 2000-2600 | 2534 | 9.39 | 2300 | Atlantic Forests | Campos Rupestres montane savanna | Floresta Ombrofila Densa | Florestas de Interior |
| bor1019 | Brazil | RIO DE JANEIRO | GUAPIMIRIM | Guapimirim | -22.49305556 | -42.94916667 | 30 | NA | 50-250 | 305 | 22 | 1441 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1020 | Brazil | RIO DE JANEIRO | CACHOEIRAS DE MACACU | Reserva Ecologica de Guapiacu | -22.45388889 | -42.77166667 | 30 | 7.385 | 30-180 | 120 | 22.85 | 1284 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1021 | Brazil | RIO DE JANEIRO | CACHOEIRAS DE MACACU | Boca do Mato | -22.40583333 | -42.60694444 | 30 | NA | 200-450 | 488 | 20.28 | 1277 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1022 | Brazil | RIO DE JANEIRO | PETROPOLIS | Independencia and Alto Xerem and Petropolis | -22.54416667 | -43.20472222 | 30 | NA | 900-1000 | 592 | 18.38 | 1867 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
Ten en cuenta que las funciones que hemos aplicado no han modificado la estructura de datos “butterfly”. Puede confirmar esto ejecutando esta linea de código:
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
Para guardar las modificaciones de la estructura de datos, se debe asignar la función a un objeto. Por ejemplo:
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1122 | Brazil | BAHIA | CRUZ DAS ALMAS | Campus da Universidade Federal do Reconcavo Baiano | -12.65 | -39.11666667 | Not Precise | NA | 220 | 139 | 23.14 | 1078 | Atlantic Forests | Bahia interior forests | Floresta Estacional Semidecidual | Diamantina |
Compara los dos ejemplos.
Para recordar
La función filter() filtrará en el orden en que los
elementos son listados en la función. Por ejemplo, para la línea de
código abajo, R filtrará por “estado” (State) y luego por “cantidad de
lluvia” (A_rainfall). Con esta información, presta atención al orden de
los elementos para filtrar tus datos de la manera que desees.
Información!
3.2 dplyr::select() - modificando estructaras de datos basado en nombre de las columnas
Otra función importante es la función select(). Esta
función es particularmente útil cuando estás trabajando con estructuras
de datos extensas. Específicamente, la función select() te
permite seleccionar una o más columnas de tu estructura de datos y
transferirlas a una nueva estructura de datos.
Por ejemplo, imagina que deseas crear una estructura de datos que contenga solamente las columnas “numero de sitio” (sites_ID) y “estado” (State) de la estructura de datos original, “butterfly”. Puedes lograr esto utilizando la siguiente línea de código:
| sites_ID | State |
|---|---|
| bor1001 | RIO GRANDE DO SUL |
| bor1002 | RIO GRANDE DO SUL |
| bor1003 | RIO GRANDE DO SUL |
| bor1004 | PARANA |
| bor1005 | PARANA |
Información!
Las diferentes columnas que seleccionaste están dividas entre comas y los nombres de las columnas tienen que tener los mismos nombres de la estructura de datos original (esto incluye el uso de mayúsculas, espacios, guiones,periodos, etc).
Esta función es similar al uso del símbolo $ porque
ambas te permiten examinar una parte específica de la estructura de
datos.
## [1] "bor1001" "bor1002" "bor1003" "bor1004" "bor1005" "bor1006" "bor1007"
## [8] "bor1008" "bor1009" "bor1010" "bor1011" "bor1012" "bor1013" "bor1014"
## [15] "bor1015" "bor1016" "bor1017" "bor1018" "bor1019" "bor1020" "bor1021"
## [22] "bor1022" "bor1023" "bor1024" "bor1025" "bor1026" "bor1027" "bor1028"
## [29] "bor1029" "bor1030" "bor1031" "bor1032" "bor1033" "bor1034" "bor1035"
## [36] "bor1036" "bor1037" "bor1038" "bor1039" "bor1040" "bor1041" "bor1042"
## [43] "bor1043" "bor1044" "bor1045" "bor1046" "bor1047" "bor1048" "bor1049"
## [50] "bor1050" "bor1051" "bor1052" "bor1053" "bor1054" "bor1055" "bor1056"
## [57] "bor1057" "bor1058" "bor1059" "bor1060" "bor1061" "bor1062" "bor1063"
## [64] "bor1064" "bor1065" "bor1066" "bor1067" "bor1068" "bor1069" "bor1070"
## [71] "bor1071" "bor1072" "bor1073" "bor1074" "bor1075" "bor1076" "bor1077"
## [78] "bor1078" "bor1079" "bor1080" "bor1081" "bor1082" "bor1083" "bor1084"
## [85] "bor1085" "bor1086" "bor1087" "bor1088" "bor1089" "bor1090" "bor1091"
## [92] "bor1092" "bor1093" "bor1094" "bor1095" "bor1096" "bor1097" "bor1098"
## [99] "bor1099" "bor1100" "bor1101" "bor1102" "bor1103" "bor1104" "bor1105"
## [106] "bor1106" "bor1107" "bor1108" "bor1109" "bor1110" "bor1111" "bor1112"
## [113] "bor1113" "bor1114" "bor1115" "bor1116" "bor1117" "bor1118" "bor1119"
## [120] "bor1120" "bor1121" "bor1122"
Compare el uso de $ y la función
select()
Si planillas a crear una estructura de datos que contiene la mayoría
de columnas de la estructura original, puede ser tedioso a listar todos
los nombres de las columnas. Afortunadamente, la función
select() permite quitar columnas usando el símbolo “-”.
Ahora, imagine que queremos a crear una estructura de datos que contiene
todas las columnas de la original “butterfly” estructura excluyendo
“numero de sitio” (sites_ID) y “estado” (State) utilizáramos la
siguiente linea de código:
| Country | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Brazil | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| Brazil | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| Brazil | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| Brazil | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| Brazil | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
Finalmente, imagina que quieres crear una estructura de datos que contenga columnas que estén agrupadas en la estructura original. En este caso, puedes usar el símbolo “:” para ahorrar tiempo al escribir todos los nombres de las columnas. Por ejemplo, presta atención a la estructura “butterfly” e imagina que quieres crear una nueva estructura de datos que contenga las primeras cuatro columnas de la estructura “butterfly”, desde “numero de sitio” (sites_ID) hasta “altitud” (altitude). Para lograr esto, puedes utilizar la siguiente línea de código:
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude |
|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 |
Para recordar
3.3 dplyr::mutate - agregando columnas a estructuras de datos
La función mutate() se utiliza para agregar columnas a
una estructura de datos existente. La nueva columna generalmente es una
función de una o más de las columnas existentes. Por ejemplo, imagina
que quieres añadir una columna a la estructura “butterfly” que sea igual
al logaritmo de la columna “A_rainfall”. Esta acción se puede realizar
de dos maneras.
Primero, puedes crear una nueva estructura de datos que incluya todas las columnas presentes en la estructura original de “butterfly”, con la nueva adición.
| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs | Log_Rainfall |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.357556 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria | 7.641564 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior | 7.417580 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.403061 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior | 7.376508 |
También es posible añadir más de una columna a una estructura de datos utilizando la siguiente línea de código:
En esta linea de código, añadimos dos columnas, la columna previa que toma el logaritmo de la columna “A_rainfall” y una nueva columna, “climate_index”, que calcula el indice de clima con multiplicar las columnas “A_rainfall” y “A_mean_temp”.
Que pasa cuando ejecutas la linea de codigo previa?
R indica un error al calcular el índice climático debido a que la columna de temperatura, “A_mean_temp”, no es numérica.
Para examinar la estructura de datos “butterfly”, recuerda que es
posible utilizar la función str():
## 'data.frame': 122 obs. of 17 variables:
## $ sites_ID : chr "bor1001" "bor1002" "bor1003" "bor1004" ...
## $ Country : chr "Brazil" "Brazil" "Brazil" "Brazil" ...
## $ State : chr "RIO GRANDE DO SUL" "RIO GRANDE DO SUL" "RIO GRANDE DO SUL" "PARANA" ...
## $ Municipality : chr "MAQUINE" "SAO FRANCISCO DE PAULA" "SANTA MARIA" "CURITIBA" ...
## $ Study.Location: chr "Maquine" "Floresta Nacional de Sao Francisco de Paula" "Santa Maria" "Curitiba" ...
## $ Latitude : chr "-29.58333333" "-29.423669" "-29.747514" "-25.3" ...
## $ Longitude : chr "-50.26666667" "-50.386914" "-53.838197" "-49.36666667" ...
## $ Precision : chr "13000" "2200" "30" "12000" ...
## $ Reserve_Area : chr NA "1615" NA NA ...
## $ Altitude : chr "100-300" "900" "50-100" "850-1000" ...
## $ Altitude1km : int 305 917 99 956 571 936 442 280 139 803 ...
## $ A_mean_temp : chr "18.68" "14.94" "19.86" "16.69" ...
## $ A_rainfall : int 1568 2083 1665 1641 1598 1691 1256 1202 1763 1431 ...
## $ Olsong200r : chr "Atlantic Forests" "Atlantic Forests" NA "Atlantic Forests" ...
## $ Olsoneconame : chr "Araucaria moist forests" "Araucaria moist forests" "Uruguayan savanna" "Araucaria moist forests" ...
## $ Ribeirovegtype: chr "Floresta Ombrofila Mista" "Estepe" "Areas de Tensao Ecologica" "Floresta Ombrofila Mista" ...
## $ BSRs : chr "Florestas de Araucaria" "Florestas de Araucaria" "Florestas de Interior" "Florestas de Araucaria" ...
Al usar la función str(), podemos confirmar que la
columna “A_mean_temp” está clasificada como un carácter en lugar de ser
numérica:
Entonces, para realizar la operación de multiplicación y calcular el índice climático, debemos cambiar la columna “A_mean_temp” a formato numérico utilizando la siguiente línea de código:
butterfly <- mutate(butterfly, A_mean_temp = as.numeric(A_mean_temp))
mutate(butterfly, Log_Rainfall = log(A_rainfall), climate_index = A_mean_temp * A_rainfall)| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs | Log_Rainfall | climate_index |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.357556 | 29290.24 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria | 7.641564 | 31120.02 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior | 7.417580 | 33066.90 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.403061 | 27388.29 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior | 7.376508 | 32998.70 |
Para recordar
3.4 dplyr::group_by - categorizando una estructura de datos por nombre de columnas
Continuaremos explorando más funciones del paquete
dplyr. En esta ocasión, utilizaremos la función
group_by(). Esta función es útil cuando tienes dos
variables categóricas y deseas analizar cuántos elementos pertenecen a
cada grupo en una u otra categoría. La función group_by()
crea una estructura de datos que reorganiza la estructura original
basándose en columnas específicas.
Esta función es especialmente útil cuando se combina con la función
summarise(), de la cual aprenderemos más en la siguiente
sección.
## # A tibble: 122 × 17
## # Groups: sites_ID [122]
## sites_ID Country State Municipality Study.Location Latitude Longitude
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 bor1001 Brazil RIO GRANDE D… MAQUINE Maquine -29.583… -50.2666…
## 2 bor1002 Brazil RIO GRANDE D… SAO FRANCIS… Floresta Naci… -29.423… -50.3869…
## 3 bor1003 Brazil RIO GRANDE D… SANTA MARIA Santa Maria -29.747… -53.8381…
## 4 bor1004 Brazil PARANA CURITIBA Curitiba -25.3 -49.3666…
## 5 bor1005 Brazil PARANA LONDRINA Londrina -23.306… -51.1706…
## 6 bor1006 Brazil PARANA GUARAPUAVA Guarapuava -25.402… -51.4211…
## 7 bor1007 Brazil PARANA MARINGA Maringa -23.435… -51.9430…
## 8 bor1008 Brazil PARANA DIAMANTE DO… Estacao Ecolo… -22.618… -52.8566…
## 9 bor1009 Brazil RIO GRANDE D… PORTO MAUA Porto Maua -27.516… -54.6666…
## 10 bor1010 Brazil PARANA BALSA NOVA Sao Luiz do P… -25.760… -50.1777…
## # ℹ 112 more rows
## # ℹ 10 more variables: Precision <chr>, Reserve_Area <chr>, Altitude <chr>,
## # Altitude1km <int>, A_mean_temp <dbl>, A_rainfall <int>, Olsong200r <chr>,
## # Olsoneconame <chr>, Ribeirovegtype <chr>, BSRs <chr>
Para recordar
3.5 dplyr::summarise() - agregando columnas sumadas a estructuras de datos
Ahora, retomaremos la función summarise() que
mencionamos en la sección anterior. Esta función calcula una estadística
específica en las columnas indicadas en tu línea de código y guarda
estos valores en una nueva columna que se agrega a tu estructura de
datos. Cuando se utilizan las funciones summarise() y
group_by() juntas, la estadística se calcula para cada
grupo. Por ejemplo, contaremos el número de ocurrencias en cada grupo de
nuestra estructura de datos “butterfly” utilizando la función
n().
Fijese que estamos combinando dos funciones, la función
group_by (agrupe la columna Estado) dentro de la función
summarise() (cuente el numero de occurencias).
| State | n() |
|---|---|
| ALAGOAS | 2 |
| BAHIA | 11 |
| ESPIRITO SANTO | 9 |
| GOIAS | 2 |
| MATO GROSSO DO SUL | 2 |
El siguiente ejmeplo puede mostrar mejor el potentical de esta función. Vamos a agrupar por Estado (“State”) y cálculamos el promedio de lluvia.
Aquí agrupamos por Estado y lo guardamos en el objeto
Group_State, después empujamos este objeto con el operador
%>% hacia la otra función summarise.
| State | mean(A_rainfall) |
|---|---|
| ALAGOAS | 1814.000 |
| BAHIA | 1229.818 |
| ESPIRITO SANTO | 1237.667 |
| GOIAS | 1604.000 |
| MATO GROSSO DO SUL | 1217.500 |
Para recordar
4. tidyr
tidyr es otro paquete que puede ayudar al usuario a
manipular una estructura de datos. El paquete tidyr es
especialmente útil para transformar una estructura de datos de un
formato largo a un formato ancho, y viceversa.
Formato largo y ancho!! ¿Qué es esto? Veamos:
Información!
Una estructura de datos en formato largo contiene valores que no se repiten en la primera columna. En cambio, una estructura de datos en formato ancho contiene valores que se repiten en la primera columna. Por ejemplo, considera las dos estructuras de datos que contienen los mismos datos pero en diferentes formatos:
Pero, ¿Por qué es importante manipular una estructura de datos de esta manera?
Los paquetes “ggplot” y “ggplot2”, que utilizamos en el taller anterior para crear gráficos, prefieren visualizar una estructura de datos en formato largo en lugar de formato ancho.
Recuerda que cada vez que abras R de nuevo y desees utilizar el
paquete tidyr, debes cargarlo usando la función
library().
4.1 tidyr::pivot_longer() - modificando estructuras de datos a formato larga
La primera función importante del paquete tidyr es
pivot_longer(). Esta función cambia el formato de una
estructura de datos, aumentando el número de filas y reduciendo el
número de columnas, creando una estructura de datos en formato
largo.
Vamos a utilizar la estructura de datos sin modificar, “polar”, del taller anterior para explorar esta función. Recuerda cargar la estructura de datos usando la siguiente línea.
Revise la estructura de esta base de datos. Es un poco rara la estructura de la base de datos, pero esta es la realidad con todas las bases de datos.
Hay muchas columnas (144), la mayoría parece ser especies pero los nombres son un poco confusos. Por ejemplo “T..melanophris……Black.browed.albatross.”, parece que los autores incluyeron el nombre científico y despues de los puntos ….. el nombre común en inglés.
| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | E..chrysocome……Rockhopper.penguin. | S..magellanicus……Magellanic.penguin. | Penguins……Penguin.sp.. | T..melanophris……Black.browed.albatross. | T..cauta……Shy.albatross. | T..chlororhynchos……Atlantic.yellow.nosed.albatross. | D..exulans……Wandering.albatross. | D..dabbenena……Tristan.albatross. | Diomedea.sp…….Great.albatrosses.sp.. | D..epomophora……Southern.royal.albatross. | D..sanfordi……Northern.royal.albatross. | D..epomophora……including.Diomedea.sanfordi. | Albatrosses……Albatross.sp.. | M..giganteus……Southern.giant.petrel. | Macronectes.sp…….Giant.petrel.sp.. | F..glacialis……Northern.fulmar. | D..capense……Cape.petrel. | P..macroptera……Great.winged.petrel. | P..feae……Fea.s.petrel. | P..incerta……Atlantic.petrel. | P..arminjoniana……Trinidade.petrel. | P..mollis……Soft.plumaged.petrel. | B..bulwerii……Bulwer.s.petrel. | P..aequinoctialis……White.chinned.petrel. | P..conspicillata……Spectacled.petrel. | Petrels……Petrel.sp.. | Pachyptila.sp…….including.Halobaena.sp.. | C..diomedea……Cory.s.shearwater. | C..edwardsii……Cape.Verde.shearwater. | P..gravis……Great.shearwater. | P..griseus……Sooty.shearwater. | P..puffinus……Manx.shearwater. | P..mauretanicus……Balearic.shearwater. | P..baroli……Macaronesian.shearwater. | P..lherminieri……Audubon.s.shearwater. | P..assimilis……Little.shearwater. | Shearwaters……Shearwater.sp.. | O..oceanicus……Wilson.s.storm.petrel. | G..nereis……Grey.backed.storm.petrel. | P..marina……White.faced.storm.petrel. | F..grallaria……White.bellied.storm.petrel. | O..castro……Madeiran.storm.petrel. | O..leucorhoa……Leach.s.storm.petrel. | O..castro……including.Oceanodroma.leucorhoa. | H..pelagicus……European.storm.petrel. | Storm.petrels……Storm.petrel.sp.. | P..aethereus……Red.billed.tropicbird. | P..lepturus……White.tailed.tropicbird. | Tropicbirds……Tropicbird.sp.. | F..aquila……Ascension.frigatebird. | F..magnificens……Magnificent.frigatebird. | M..bassanus……Northern.gannet. | S..capensis……Cape.gannet. | S..sula……Red.footed.booby. | S..leucogaster……Brown.booby. | C..skua……Great.skua. | C..maccormicki……South.polar.skua. | C..antarctica……Antarctic.skua. | S..pomarinus……Pomarine.skua. | S..parasiticus……Arctic.skua. | S..longicaudus……Long.tailed.skua. | Skuas……Skua.sp.. | B..bernicla……Brent.goose. | G..arctica……Black.throated.diver. | P..capensis……Cape.cormorant. | P..coronatus……Crowned.cormorant. | P..carbo……Great.cormorant. | P..magellani……Magellanic.diving.petrel. | Pelecanoides.sp…….Diving.petrel.sp.. | P..fulicarius……Red.phalarope. | L..canus……Common.gull. | L..melanocephalus……Mediteranean.gull. | L..argentatus……Herring.gull. | L..fuscus……Lesser.black.backed.gull. | L..michahellis……Yellow.legged.gull. | L..dominicanus……Cape.gull. | L..marinus……Great.black.backed.gull. | L..ridibundus……Black.headed.gull. | L..minutus……Little.gull. | R..tridactyla……Black.legged.kittiwake. | X..sabini……Sabine.s.gull. | Gulls……Gull.sp.. | S..hirundo……Common.tern. | S..arctica……Arctic.tern. | S..dougallii……Roseate.tern. | S..anaethetus……Bridled.tern. | S..fuscata……Sooty.tern. | S..sandvicensis……Sandwich.tern. | T..maximus……Royal.tern. | C..niger……Black.tern. | T..bergii……Crested.tern. | Terns……Tern.sp.. | A..stolidus……Brown.noddy. | U..aalge……Guillemot. | A..torda……Razorbill. | Alcidae.sp…….Alcidae.sp.. | Seabird.unident……Seabird..unidentified. | P..catodon……Sperm.whale. | M..novaeangliae……Humpback.whale. | B..physalus……Fin.whale. | B..borealis……Sei.whale. | B..acutorostrata……Minke.whale. | B..brydei……Bryde.s.whale. | G..melas……Long.finned.pilot.whale. | G..macrorhynchus……Short.finned.pilot.whale. | Globicephala.sp…….Pilot.whale.sp.. | Z..cavirostris……Cuvier.s.beaked.whale. | Beaked.whale……Beaked.whale.sp.. | Whale.unident……Whale..unidentified. | O..orca……Killer.whale. | L..australis……Peale.s.dolphin. | L..albirostris……White.beacked.dolphin. | Lagenorhynchus.sp…….Lagenorhynchus.sp.. | D..delphis……Common.dolphin. | S..frontalis……Atlantic.spotted.dolphin. | S..coeruleoalba……Striped.dolphin. | S..clymene……Clymene.dolphin. | T..truncatus……Bottlenose.dolphin. | G..griseus……Risso.s.dolphin. | S..bredanensis……Rough.toothed.dolphin. | S..longirostris……Spinner.dolphin. | Dolphin.unident……Dolphin..unidentified. | P..phocoena……Harbour.porpoise. | A..pusillus……South.African.fur.seal. | C..caretta……Loggerhead.sea.turtle. | C..mydas……Green.sea.turtle. | D..coriacea……Leatherback.sea.turtle. | Sea.turtles……Sea.turtle.sp.. | Manta.sp…….Manta.ray. | Ray……Ray. | Hammerhead.shark……Hammerhead.shark. | Shark……Shark. | Mola.mola……Sun.fish. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.3860 | 5.35 | 10 | 0 | 0 | 0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 0 | 0 | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2012-04-11T14:00 | -51.41 | -66.80 | 115 | 9.3 | 8.6118 | 32.9383 | 8.2629 | 5.49 | 10 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 29 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 2012-04-11T14:30 | -51.34 | -66.74 | 124 | 9.4 | 8.7044 | 32.9225 | 8.4985 | 5.49 | 10 | 0 | 0 | 0 | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 2012-04-11T15:00 | -51.28 | -66.67 | 117 | 9.2 | 8.5192 | 32.9378 | 8.4757 | 5.75 | 10 | 0 | 0 | 0 | 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 5 | 2012-04-11T15:30 | -51.21 | -66.61 | 123 | 5.7 | 5.2782 | 32.9560 | 8.2094 | 5.80 | 10 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 297 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
La idea es que los nombres no esten en columnas sino que los organizemos en filas en una columna que llamemos “Especies”. Y los valores que tiene cada especie en una columna que llamemos “Abundancia”.
Para manipular la estructura de datos “polar” a formato largo, puedes utilizar la siguiente línea de código.
¿Cuántas columnas hay ahora? ¿Cuantas filas hay? ¿Por qué tantas? este es el formato largo al que haciamos referencia
polar_longer <- pivot_longer(polar, # base de datos
names_to = "Especies", # la columna que crearemos para incluir todas las especies
values_to = "Abundance", # la columna que crearemos para adicionar los valores de abundancia de cada especie
cols = `E..chrysocome......Rockhopper.penguin.`:`Mola.mola......Sun.fish.` # Las columnas que deseas incluir, aquí utilizamos todas las especies entonces la primera especie y la última separadas de ":"
)
polar_longer| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | Especies | Abundance |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | E..chrysocome……Rockhopper.penguin. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | S..magellanicus……Magellanic.penguin. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | Penguins……Penguin.sp.. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | T..melanophris……Black.browed.albatross. | 16 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | T..cauta……Shy.albatross. | 0 |
Veamos cuantos nombres de especies diferentes hay:
## [1] "E..chrysocome......Rockhopper.penguin."
## [2] "S..magellanicus......Magellanic.penguin."
## [3] "Penguins......Penguin.sp.."
## [4] "T..melanophris......Black.browed.albatross."
## [5] "T..cauta......Shy.albatross."
## [6] "T..chlororhynchos......Atlantic.yellow.nosed.albatross."
## [7] "D..exulans......Wandering.albatross."
## [8] "D..dabbenena......Tristan.albatross."
## [9] "Diomedea.sp.......Great.albatrosses.sp.."
## [10] "D..epomophora......Southern.royal.albatross."
## [11] "D..sanfordi......Northern.royal.albatross."
## [12] "D..epomophora......including.Diomedea.sanfordi."
## [13] "Albatrosses......Albatross.sp.."
## [14] "M..giganteus......Southern.giant.petrel."
## [15] "Macronectes.sp.......Giant.petrel.sp.."
## [16] "F..glacialis......Northern.fulmar."
## [17] "D..capense......Cape.petrel."
## [18] "P..macroptera......Great.winged.petrel."
## [19] "P..feae......Fea.s.petrel."
## [20] "P..incerta......Atlantic.petrel."
## [21] "P..arminjoniana......Trinidade.petrel."
## [22] "P..mollis......Soft.plumaged.petrel."
## [23] "B..bulwerii......Bulwer.s.petrel."
## [24] "P..aequinoctialis......White.chinned.petrel."
## [25] "P..conspicillata......Spectacled.petrel."
## [26] "Petrels......Petrel.sp.."
## [27] "Pachyptila.sp.......including.Halobaena.sp.."
## [28] "C..diomedea......Cory.s.shearwater."
## [29] "C..edwardsii......Cape.Verde.shearwater."
## [30] "P..gravis......Great.shearwater."
## [31] "P..griseus......Sooty.shearwater."
## [32] "P..puffinus......Manx.shearwater."
## [33] "P..mauretanicus......Balearic.shearwater."
## [34] "P..baroli......Macaronesian.shearwater."
## [35] "P..lherminieri......Audubon.s.shearwater."
## [36] "P..assimilis......Little.shearwater."
## [37] "Shearwaters......Shearwater.sp.."
## [38] "O..oceanicus......Wilson.s.storm.petrel."
## [39] "G..nereis......Grey.backed.storm.petrel."
## [40] "P..marina......White.faced.storm.petrel."
## [41] "F..grallaria......White.bellied.storm.petrel."
## [42] "O..castro......Madeiran.storm.petrel."
## [43] "O..leucorhoa......Leach.s.storm.petrel."
## [44] "O..castro......including.Oceanodroma.leucorhoa."
## [45] "H..pelagicus......European.storm.petrel."
## [46] "Storm.petrels......Storm.petrel.sp.."
## [47] "P..aethereus......Red.billed.tropicbird."
## [48] "P..lepturus......White.tailed.tropicbird."
## [49] "Tropicbirds......Tropicbird.sp.."
## [50] "F..aquila......Ascension.frigatebird."
## [51] "F..magnificens......Magnificent.frigatebird."
## [52] "M..bassanus......Northern.gannet."
## [53] "S..capensis......Cape.gannet."
## [54] "S..sula......Red.footed.booby."
## [55] "S..leucogaster......Brown.booby."
## [56] "C..skua......Great.skua."
## [57] "C..maccormicki......South.polar.skua."
## [58] "C..antarctica......Antarctic.skua."
## [59] "S..pomarinus......Pomarine.skua."
## [60] "S..parasiticus......Arctic.skua."
## [61] "S..longicaudus......Long.tailed.skua."
## [62] "Skuas......Skua.sp.."
## [63] "B..bernicla......Brent.goose."
## [64] "G..arctica......Black.throated.diver."
## [65] "P..capensis......Cape.cormorant."
## [66] "P..coronatus......Crowned.cormorant."
## [67] "P..carbo......Great.cormorant."
## [68] "P..magellani......Magellanic.diving.petrel."
## [69] "Pelecanoides.sp.......Diving.petrel.sp.."
## [70] "P..fulicarius......Red.phalarope."
## [71] "L..canus......Common.gull."
## [72] "L..melanocephalus......Mediteranean.gull."
## [73] "L..argentatus......Herring.gull."
## [74] "L..fuscus......Lesser.black.backed.gull."
## [75] "L..michahellis......Yellow.legged.gull."
## [76] "L..dominicanus......Cape.gull."
## [77] "L..marinus......Great.black.backed.gull."
## [78] "L..ridibundus......Black.headed.gull."
## [79] "L..minutus......Little.gull."
## [80] "R..tridactyla......Black.legged.kittiwake."
## [81] "X..sabini......Sabine.s.gull."
## [82] "Gulls......Gull.sp.."
## [83] "S..hirundo......Common.tern."
## [84] "S..arctica......Arctic.tern."
## [85] "S..dougallii......Roseate.tern."
## [86] "S..anaethetus......Bridled.tern."
## [87] "S..fuscata......Sooty.tern."
## [88] "S..sandvicensis......Sandwich.tern."
## [89] "T..maximus......Royal.tern."
## [90] "C..niger......Black.tern."
## [91] "T..bergii......Crested.tern."
## [92] "Terns......Tern.sp.."
## [93] "A..stolidus......Brown.noddy."
## [94] "U..aalge......Guillemot."
## [95] "A..torda......Razorbill."
## [96] "Alcidae.sp.......Alcidae.sp.."
## [97] "Seabird.unident......Seabird..unidentified."
## [98] "P..catodon......Sperm.whale."
## [99] "M..novaeangliae......Humpback.whale."
## [100] "B..physalus......Fin.whale."
## [101] "B..borealis......Sei.whale."
## [102] "B..acutorostrata......Minke.whale."
## [103] "B..brydei......Bryde.s.whale."
## [104] "G..melas......Long.finned.pilot.whale."
## [105] "G..macrorhynchus......Short.finned.pilot.whale."
## [106] "Globicephala.sp.......Pilot.whale.sp.."
## [107] "Z..cavirostris......Cuvier.s.beaked.whale."
## [108] "Beaked.whale......Beaked.whale.sp.."
## [109] "Whale.unident......Whale..unidentified."
## [110] "O..orca......Killer.whale."
## [111] "L..australis......Peale.s.dolphin."
## [112] "L..albirostris......White.beacked.dolphin."
## [113] "Lagenorhynchus.sp.......Lagenorhynchus.sp.."
## [114] "D..delphis......Common.dolphin."
## [115] "S..frontalis......Atlantic.spotted.dolphin."
## [116] "S..coeruleoalba......Striped.dolphin."
## [117] "S..clymene......Clymene.dolphin."
## [118] "T..truncatus......Bottlenose.dolphin."
## [119] "G..griseus......Risso.s.dolphin."
## [120] "S..bredanensis......Rough.toothed.dolphin."
## [121] "S..longirostris......Spinner.dolphin."
## [122] "Dolphin.unident......Dolphin..unidentified."
## [123] "P..phocoena......Harbour.porpoise."
## [124] "A..pusillus......South.African.fur.seal."
## [125] "C..caretta......Loggerhead.sea.turtle."
## [126] "C..mydas......Green.sea.turtle."
## [127] "D..coriacea......Leatherback.sea.turtle."
## [128] "Sea.turtles......Sea.turtle.sp.."
## [129] "Manta.sp.......Manta.ray."
## [130] "Ray......Ray."
## [131] "Hammerhead.shark......Hammerhead.shark."
## [132] "Shark......Shark."
## [133] "Mola.mola......Sun.fish."
Ahora lo que podemos hacer es encontrar la media de la abundancia por especie.
¿Recuerda cómo hacerlo?
polar_longer_mean <- summarise(group_by(polar_longer, by = Especies), mean(Abundance))
polar_longer_mean| by | mean(Abundance) |
|---|---|
| A..pusillus……South.African.fur.seal. | 0.0000000 |
| A..stolidus……Brown.noddy. | 0.0000000 |
| A..torda……Razorbill. | 0.0000000 |
| Albatrosses……Albatross.sp.. | 0.0778626 |
| Alcidae.sp…….Alcidae.sp.. | 0.0000000 |
Gráfiquemos los datos:
polar_longer_mean2 <- subset(polar_longer_mean, polar_longer_mean$`mean(Abundance)`>0.1) # removamos datos menores a 0.1 para poder visualizar las especies de mayor abundancia
ggplot(polar_longer_mean2, aes(x= polar_longer_mean2$`mean(Abundance)`, y = reorder(polar_longer_mean2$by, -polar_longer_mean2$`mean(Abundance)`)))+
geom_bar(stat = 'identity', fill="lightblue", orientation = "y")+
xlab("Abundance")+
ylab("Especies")Para recordar
4.2 tidyr::pivot_wider() - modificando estructuras de datos a formato ancho
La segunda función de la que hablaremos es el inverso de la primera función. El inverso de pivot_longer es pivot_wider. Esta función manipula la estructura de datos al formato ancho, aumentando el número de columnas y reduciendo el número de filas.
Para manipular la estructura de datos “polar_longer” al formato ancho, puedes utilizar la siguiente línea de código:
polar_wider <- pivot_wider(polar_longer, names_from = 'Especies', values_from = 'Abundance')
polar_wider| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | E..chrysocome……Rockhopper.penguin. | S..magellanicus……Magellanic.penguin. | Penguins……Penguin.sp.. | T..melanophris……Black.browed.albatross. | T..cauta……Shy.albatross. | T..chlororhynchos……Atlantic.yellow.nosed.albatross. | D..exulans……Wandering.albatross. | D..dabbenena……Tristan.albatross. | Diomedea.sp…….Great.albatrosses.sp.. | D..epomophora……Southern.royal.albatross. | D..sanfordi……Northern.royal.albatross. | D..epomophora……including.Diomedea.sanfordi. | Albatrosses……Albatross.sp.. | M..giganteus……Southern.giant.petrel. | Macronectes.sp…….Giant.petrel.sp.. | F..glacialis……Northern.fulmar. | D..capense……Cape.petrel. | P..macroptera……Great.winged.petrel. | P..feae……Fea.s.petrel. | P..incerta……Atlantic.petrel. | P..arminjoniana……Trinidade.petrel. | P..mollis……Soft.plumaged.petrel. | B..bulwerii……Bulwer.s.petrel. | P..aequinoctialis……White.chinned.petrel. | P..conspicillata……Spectacled.petrel. | Petrels……Petrel.sp.. | Pachyptila.sp…….including.Halobaena.sp.. | C..diomedea……Cory.s.shearwater. | C..edwardsii……Cape.Verde.shearwater. | P..gravis……Great.shearwater. | P..griseus……Sooty.shearwater. | P..puffinus……Manx.shearwater. | P..mauretanicus……Balearic.shearwater. | P..baroli……Macaronesian.shearwater. | P..lherminieri……Audubon.s.shearwater. | P..assimilis……Little.shearwater. | Shearwaters……Shearwater.sp.. | O..oceanicus……Wilson.s.storm.petrel. | G..nereis……Grey.backed.storm.petrel. | P..marina……White.faced.storm.petrel. | F..grallaria……White.bellied.storm.petrel. | O..castro……Madeiran.storm.petrel. | O..leucorhoa……Leach.s.storm.petrel. | O..castro……including.Oceanodroma.leucorhoa. | H..pelagicus……European.storm.petrel. | Storm.petrels……Storm.petrel.sp.. | P..aethereus……Red.billed.tropicbird. | P..lepturus……White.tailed.tropicbird. | Tropicbirds……Tropicbird.sp.. | F..aquila……Ascension.frigatebird. | F..magnificens……Magnificent.frigatebird. | M..bassanus……Northern.gannet. | S..capensis……Cape.gannet. | S..sula……Red.footed.booby. | S..leucogaster……Brown.booby. | C..skua……Great.skua. | C..maccormicki……South.polar.skua. | C..antarctica……Antarctic.skua. | S..pomarinus……Pomarine.skua. | S..parasiticus……Arctic.skua. | S..longicaudus……Long.tailed.skua. | Skuas……Skua.sp.. | B..bernicla……Brent.goose. | G..arctica……Black.throated.diver. | P..capensis……Cape.cormorant. | P..coronatus……Crowned.cormorant. | P..carbo……Great.cormorant. | P..magellani……Magellanic.diving.petrel. | Pelecanoides.sp…….Diving.petrel.sp.. | P..fulicarius……Red.phalarope. | L..canus……Common.gull. | L..melanocephalus……Mediteranean.gull. | L..argentatus……Herring.gull. | L..fuscus……Lesser.black.backed.gull. | L..michahellis……Yellow.legged.gull. | L..dominicanus……Cape.gull. | L..marinus……Great.black.backed.gull. | L..ridibundus……Black.headed.gull. | L..minutus……Little.gull. | R..tridactyla……Black.legged.kittiwake. | X..sabini……Sabine.s.gull. | Gulls……Gull.sp.. | S..hirundo……Common.tern. | S..arctica……Arctic.tern. | S..dougallii……Roseate.tern. | S..anaethetus……Bridled.tern. | S..fuscata……Sooty.tern. | S..sandvicensis……Sandwich.tern. | T..maximus……Royal.tern. | C..niger……Black.tern. | T..bergii……Crested.tern. | Terns……Tern.sp.. | A..stolidus……Brown.noddy. | U..aalge……Guillemot. | A..torda……Razorbill. | Alcidae.sp…….Alcidae.sp.. | Seabird.unident……Seabird..unidentified. | P..catodon……Sperm.whale. | M..novaeangliae……Humpback.whale. | B..physalus……Fin.whale. | B..borealis……Sei.whale. | B..acutorostrata……Minke.whale. | B..brydei……Bryde.s.whale. | G..melas……Long.finned.pilot.whale. | G..macrorhynchus……Short.finned.pilot.whale. | Globicephala.sp…….Pilot.whale.sp.. | Z..cavirostris……Cuvier.s.beaked.whale. | Beaked.whale……Beaked.whale.sp.. | Whale.unident……Whale..unidentified. | O..orca……Killer.whale. | L..australis……Peale.s.dolphin. | L..albirostris……White.beacked.dolphin. | Lagenorhynchus.sp…….Lagenorhynchus.sp.. | D..delphis……Common.dolphin. | S..frontalis……Atlantic.spotted.dolphin. | S..coeruleoalba……Striped.dolphin. | S..clymene……Clymene.dolphin. | T..truncatus……Bottlenose.dolphin. | G..griseus……Risso.s.dolphin. | S..bredanensis……Rough.toothed.dolphin. | S..longirostris……Spinner.dolphin. | Dolphin.unident……Dolphin..unidentified. | P..phocoena……Harbour.porpoise. | A..pusillus……South.African.fur.seal. | C..caretta……Loggerhead.sea.turtle. | C..mydas……Green.sea.turtle. | D..coriacea……Leatherback.sea.turtle. | Sea.turtles……Sea.turtle.sp.. | Manta.sp…….Manta.ray. | Ray……Ray. | Hammerhead.shark……Hammerhead.shark. | Shark……Shark. | Mola.mola……Sun.fish. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.3860 | 5.35 | 10 | 0 | 0 | 0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 0 | 0 | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2012-04-11T14:00 | -51.41 | -66.80 | 115 | 9.3 | 8.6118 | 32.9383 | 8.2629 | 5.49 | 10 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 29 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 2012-04-11T14:30 | -51.34 | -66.74 | 124 | 9.4 | 8.7044 | 32.9225 | 8.4985 | 5.49 | 10 | 0 | 0 | 0 | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 2012-04-11T15:00 | -51.28 | -66.67 | 117 | 9.2 | 8.5192 | 32.9378 | 8.4757 | 5.75 | 10 | 0 | 0 | 0 | 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 5 | 2012-04-11T15:30 | -51.21 | -66.61 | 123 | 5.7 | 5.2782 | 32.9560 | 8.2094 | 5.80 | 10 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 297 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Para recordar
5. stringr
Por último, otro paquete útil cuando se trabaja con datos, especialmente cuando se trabaja con caracteres o “strings”, es “stringr”. Este paquete puede manipular caracteres individuales dentro de un vector de caracteres, anidar o eliminar espacios en blanco e identificar patrones en un vector de caracteres.
Información!
Las funciones del paquete “stringr” comienzan con “str_”, lo cual
puede ser similar a la función str() que discutimos en el
taller anterior. Sin embargo, no hay relación entre estas funciones, ya
que str() muestra la estructura de un conjunto de
datos.
Tips!
Recuerda que cada vez que abras R de nuevo y desees usar el paquete
“stringr”, debes cargarlo usando la función library().
En la siguiente parte del taller, vamos a usar el conjunto de datos “parrot”. La diferencia es que estos datos son la versión original y sin modificaciones de “parrot_clean” del taller previo.
Empezamos cargando los datos y asignándolos al objeto “parrot”.
Luego creemos un objeto (vector) con los nombres de las columnas.
parrot <- read.delim("Ferrer-Paris_2013.tab", skip = 27)
colnames_parrot <- colnames(parrot)
colnames_parrot## [1] "Longitude" "Latitude" "Code"
## [4] "Time..min." "Date.Time" "A..amazonica...."
## [7] "A..autumnalis...." "A..barbadensis...." "A..dufresniana...."
## [10] "A..farinosa...." "A..festiva...." "A..mercenaria...."
## [13] "A..ochrocephala...."
5.1 stringr::str_replace() - reemplazar characteres en estructuras de datos
La primera función del paquete “stringr” de la que hablaremos es
str_replace(). Esta función es importante cuando se desea
reemplazar caracteres específicos en una estructura de datos.
En la estructura de datos “parrot”, los nombres de las especies están separados por puntos. Por ejemplo, el nombre de la primera especie está escrito como “A..Amazonica….”. Vamos a utilizar la siguiente línea de código para reemplazar el primer par de puntos con un guion bajo:
parrot_replace <- str_replace(colnames_parrot, # vector con nombre de las columnas
"\\.\\.", # patrón que queremos reemplazar
"_" # con qué lo queremos reemplazar
)
parrot_replace## [1] "Longitude" "Latitude" "Code"
## [4] "Time_min." "Date.Time" "A_amazonica...."
## [7] "A_autumnalis...." "A_barbadensis...." "A_dufresniana...."
## [10] "A_farinosa...." "A_festiva...." "A_mercenaria...."
## [13] "A_ochrocephala...."
5.2 stringr::str_remove() - eliminar characteres en estructura de datos
Similar a str_replace(), la función
str_remove() permite quitar caracteres específicos de una
estructura de datos. Ahora que hemos reemplazado el primer grupo de
puntos con un guion bajo, vamos a utilizar la función
str_remove() para eliminar el segundo grupo de puntos al
final del nombre de las especies. Usaremos la siguiente línea de
código:
## [1] "Longitude" "Latitude" "Code" "Time_min."
## [5] "Date.Time" "A_amazonica" "A_autumnalis" "A_barbadensis"
## [9] "A_dufresniana" "A_farinosa" "A_festiva" "A_mercenaria"
## [13] "A_ochrocephala"
Para recordar
Ahora que hemos limpiado los nombres de las columnas, podemos reemplazar los nombres en la estructura de datos (recuerda que extraemos los nombres cuando realizamos cambios) utilizando la siguiente línea de código:
| Longitude | Latitude | Code | Time_min. | Date.Time | A_amazonica | A_autumnalis | A_barbadensis | A_dufresniana | A_farinosa | A_festiva | A_mercenaria | A_ochrocephala |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -72.54740 | 10.31623 | NM05 | 3 | 2010-03-15T11:13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.54267 | 10.31252 | NM05 | 3 | 2010-03-15T11:06 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53757 | 10.31035 | NM05 | 3 | 2010-03-15T10:59 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53145 | 10.30940 | NM05 | 3 | 2010-03-15T10:54 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.52523 | 10.30667 | NM05 | 3 | 2010-03-15T10:46 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Información!
Al utilizar las funciones del paquete stringr, es
importante tener en cuenta que los ejemplos de las dos funciones
anteriores solo ejecutan el comando para la primera ocurrencia. Para
aplicar el comando a todas las ocurrencias, el usuario debe agregar
“_all” a la línea de código.
Consulta la solución del ejercicio cinco para un ejemplo de cómo
realizar los cambios en los nombres en un solo paso utilizando
str_remove_all().
6. Ayuda en la web
Si necesitas más información sobre las funciones de los paquetes mencionados, puedes consultar la documentación en línea:
A continuación, te presento unos ejercicios para poner en práctica lo aprendido:
7. Practica!
Ejercicio 1
¿Cuáles son las funciones de las diferentes partes de esta
línea de código? Nota: en R Studio utiliza la ayuda para la
función filter() en el paquete dplyr.
Haz clic aquí para solucion!
A. El objeto conteniendo los datos
B. Expresiónes que entregan “True” o “False”
Ejercicio 2
Usando la estructura de datos “parrot_data”, agrega una
columna que muestre la suma de las abundancias para cada especie.
Verifica que la columna fue añadida usando la función
head().
Haz clic aquí para solucion!
parrot_data <- read.csv("venezuelan_parrots_wide.csv")
parrot_data_total <- parrot_data %>%
group_by(site) %>%
summarise_all(sum) %>%
rowwise() %>%
mutate(total_abundance = sum(c_across(A_amazonica:A_ochrocephala)) )## # A tibble: 6 × 6
## # Rowwise:
## site A_amazonica A_barbadensis A_farinosa A_ochrocephala total_abundance
## <chr> <int> <int> <int> <int> <int>
## 1 NM01 0 0 0 0 0
## 2 NM02 0 0 0 0 0
## 3 NM03 1 0 0 3 4
## 4 NM05 0 0 10 11 21
## 5 NM07 4 0 2 8 14
## 6 NM08 8 0 0 2 10
Ejercicio 3
Primero, utilizando la estructura de datos “butterfly”, agrupa la estructura de datos por “estado” (state) y suma los valores obtenidos por el número de ocurrencias. Segundo, visualiza los datos modificados en forma de un gráfico de barras mostrando el número de ocurrencias por estado.
Haz clic aquí para solución!
En el gráfico resultante, vemos que es difícil leer los nombres en el axis horizontal. Para corregir esto,es posible utilizar la adición a el código siguiente:
ggplot(data = butterfly_state, aes(x = State, y = n_spe)) + geom_bar(stat = "identity") +
theme(axis.text = element_text(angle = 90))
Ejercicio 4
Utilizando la estructura de datos “polar”, crea un nuevo
objeto llamado “high_temp” utilizando la función filter()
para demostrar todas las temperaturas mayores a 23 grados Celsius.
Luego, utiliza la función mutate() para crear una nueva
columna con valores de “Verdadero/Falso” y ejecuta el comando anterior.
Pista: utiliza la función mutate() para crear una nueva
columna.
Haz clic aquí para solución!
## 'data.frame': 655 obs. of 144 variables:
## $ ID..Consecutive.number.of.transec.... : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Date.Time..Starting.time..UTC..of.30.min.... : chr "2012-04-11T13:30" "2012-04-11T14:00" "2012-04-11T14:30" "2012-04-11T15:00" ...
## $ Latitude..Mid.latitude.of.30.min.transe.... : num -51.5 -51.4 -51.3 -51.3 -51.2 ...
## $ Longitude..Mid.longitude.of.30.min.trans.... : num -66.9 -66.8 -66.7 -66.7 -66.6 ...
## $ Bathy.depth..m...Mid.mean.water.depth.of.30.mi.... : int 108 115 124 117 123 121 122 121 122 NA ...
## $ Speed..kn...Average.speed.of.the.vessel.d.... : num 8.8 9.3 9.4 9.2 5.7 9.7 9.3 9.2 9.9 9.8 ...
## $ Distance..km...Distance.covered.during.30.mi.... : num 8.15 8.61 8.7 8.52 5.28 ...
## $ Sal..Mid.mean.surface.salinity.of..... : num 32.9 32.9 32.9 32.9 33 ...
## $ Temp...C...Mid.mean.surface.water.temper.... : num 8.39 8.26 8.5 8.48 8.21 ...
## $ F.chl..µg.l...Mid.fluorescence.of.30.min.tr.... : num 5.35 5.49 5.49 5.75 5.8 6.01 6.14 6.5 6.61 6.91 ...
## $ Zone..Zones..which.were.defined.on..... : int 10 10 10 10 10 10 10 10 10 10 ...
## $ E..chrysocome......Rockhopper.penguin. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..magellanicus......Magellanic.penguin. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Penguins......Penguin.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ T..melanophris......Black.browed.albatross. : int 16 7 14 13 1 8 0 7 2 1 ...
## $ T..cauta......Shy.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ T..chlororhynchos......Atlantic.yellow.nosed.albatross.: int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..exulans......Wandering.albatross. : int 0 0 0 0 0 1 0 0 0 0 ...
## $ D..dabbenena......Tristan.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Diomedea.sp.......Great.albatrosses.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..epomophora......Southern.royal.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..sanfordi......Northern.royal.albatross. : int 0 2 0 0 0 0 0 0 0 0 ...
## $ D..epomophora......including.Diomedea.sanfordi. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Albatrosses......Albatross.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ M..giganteus......Southern.giant.petrel. : int 0 0 0 0 0 0 1 2 0 2 ...
## $ Macronectes.sp.......Giant.petrel.sp.. : int 0 0 0 0 0 0 0 0 3 0 ...
## $ F..glacialis......Northern.fulmar. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..capense......Cape.petrel. : int 1 0 0 0 0 0 0 0 0 0 ...
## $ P..macroptera......Great.winged.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..feae......Fea.s.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..incerta......Atlantic.petrel. : int 1 0 0 0 0 0 0 0 0 0 ...
## $ P..arminjoniana......Trinidade.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..mollis......Soft.plumaged.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ B..bulwerii......Bulwer.s.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..aequinoctialis......White.chinned.petrel. : int 9 1 7 5 4 7 0 8 8 4 ...
## $ P..conspicillata......Spectacled.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Petrels......Petrel.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Pachyptila.sp.......including.Halobaena.sp.. : int 0 0 0 0 0 0 0 1 0 0 ...
## $ C..diomedea......Cory.s.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..edwardsii......Cape.Verde.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..gravis......Great.shearwater. : int 38 29 32 22 297 17 5 8 0 3 ...
## $ P..griseus......Sooty.shearwater. : int 0 0 0 0 0 0 0 0 0 2 ...
## $ P..puffinus......Manx.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..mauretanicus......Balearic.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..baroli......Macaronesian.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..lherminieri......Audubon.s.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..assimilis......Little.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Shearwaters......Shearwater.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..oceanicus......Wilson.s.storm.petrel. : int 1 4 0 4 3 0 0 2 2 1 ...
## $ G..nereis......Grey.backed.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..marina......White.faced.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..grallaria......White.bellied.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..castro......Madeiran.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..leucorhoa......Leach.s.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..castro......including.Oceanodroma.leucorhoa. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ H..pelagicus......European.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Storm.petrels......Storm.petrel.sp.. : int 0 0 2 0 0 0 0 0 0 0 ...
## $ P..aethereus......Red.billed.tropicbird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..lepturus......White.tailed.tropicbird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Tropicbirds......Tropicbird.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..aquila......Ascension.frigatebird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..magnificens......Magnificent.frigatebird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ M..bassanus......Northern.gannet. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..capensis......Cape.gannet. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..sula......Red.footed.booby. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..leucogaster......Brown.booby. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..skua......Great.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..maccormicki......South.polar.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..antarctica......Antarctic.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..pomarinus......Pomarine.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..parasiticus......Arctic.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..longicaudus......Long.tailed.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Skuas......Skua.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ B..bernicla......Brent.goose. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ G..arctica......Black.throated.diver. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..capensis......Cape.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..coronatus......Crowned.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..carbo......Great.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..magellani......Magellanic.diving.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Pelecanoides.sp.......Diving.petrel.sp.. : int 0 0 0 0 0 0 0 0 0 2 ...
## $ P..fulicarius......Red.phalarope. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..canus......Common.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..melanocephalus......Mediteranean.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..argentatus......Herring.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..fuscus......Lesser.black.backed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..michahellis......Yellow.legged.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..dominicanus......Cape.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..marinus......Great.black.backed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..ridibundus......Black.headed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..minutus......Little.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ R..tridactyla......Black.legged.kittiwake. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ X..sabini......Sabine.s.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gulls......Gull.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..hirundo......Common.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..arctica......Arctic.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..dougallii......Roseate.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..anaethetus......Bridled.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..fuscata......Sooty.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..sandvicensis......Sandwich.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## [list output truncated]
| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | E..chrysocome……Rockhopper.penguin. | S..magellanicus……Magellanic.penguin. | Penguins……Penguin.sp.. | T..melanophris……Black.browed.albatross. | T..cauta……Shy.albatross. | T..chlororhynchos……Atlantic.yellow.nosed.albatross. | D..exulans……Wandering.albatross. | D..dabbenena……Tristan.albatross. | Diomedea.sp…….Great.albatrosses.sp.. | D..epomophora……Southern.royal.albatross. | D..sanfordi……Northern.royal.albatross. | D..epomophora……including.Diomedea.sanfordi. | Albatrosses……Albatross.sp.. | M..giganteus……Southern.giant.petrel. | Macronectes.sp…….Giant.petrel.sp.. | F..glacialis……Northern.fulmar. | D..capense……Cape.petrel. | P..macroptera……Great.winged.petrel. | P..feae……Fea.s.petrel. | P..incerta……Atlantic.petrel. | P..arminjoniana……Trinidade.petrel. | P..mollis……Soft.plumaged.petrel. | B..bulwerii……Bulwer.s.petrel. | P..aequinoctialis……White.chinned.petrel. | P..conspicillata……Spectacled.petrel. | Petrels……Petrel.sp.. | Pachyptila.sp…….including.Halobaena.sp.. | C..diomedea……Cory.s.shearwater. | C..edwardsii……Cape.Verde.shearwater. | P..gravis……Great.shearwater. | P..griseus……Sooty.shearwater. | P..puffinus……Manx.shearwater. | P..mauretanicus……Balearic.shearwater. | P..baroli……Macaronesian.shearwater. | P..lherminieri……Audubon.s.shearwater. | P..assimilis……Little.shearwater. | Shearwaters……Shearwater.sp.. | O..oceanicus……Wilson.s.storm.petrel. | G..nereis……Grey.backed.storm.petrel. | P..marina……White.faced.storm.petrel. | F..grallaria……White.bellied.storm.petrel. | O..castro……Madeiran.storm.petrel. | O..leucorhoa……Leach.s.storm.petrel. | O..castro……including.Oceanodroma.leucorhoa. | H..pelagicus……European.storm.petrel. | Storm.petrels……Storm.petrel.sp.. | P..aethereus……Red.billed.tropicbird. | P..lepturus……White.tailed.tropicbird. | Tropicbirds……Tropicbird.sp.. | F..aquila……Ascension.frigatebird. | F..magnificens……Magnificent.frigatebird. | M..bassanus……Northern.gannet. | S..capensis……Cape.gannet. | S..sula……Red.footed.booby. | S..leucogaster……Brown.booby. | C..skua……Great.skua. | C..maccormicki……South.polar.skua. | C..antarctica……Antarctic.skua. | S..pomarinus……Pomarine.skua. | S..parasiticus……Arctic.skua. | S..longicaudus……Long.tailed.skua. | Skuas……Skua.sp.. | B..bernicla……Brent.goose. | G..arctica……Black.throated.diver. | P..capensis……Cape.cormorant. | P..coronatus……Crowned.cormorant. | P..carbo……Great.cormorant. | P..magellani……Magellanic.diving.petrel. | Pelecanoides.sp…….Diving.petrel.sp.. | P..fulicarius……Red.phalarope. | L..canus……Common.gull. | L..melanocephalus……Mediteranean.gull. | L..argentatus……Herring.gull. | L..fuscus……Lesser.black.backed.gull. | L..michahellis……Yellow.legged.gull. | L..dominicanus……Cape.gull. | L..marinus……Great.black.backed.gull. | L..ridibundus……Black.headed.gull. | L..minutus……Little.gull. | R..tridactyla……Black.legged.kittiwake. | X..sabini……Sabine.s.gull. | Gulls……Gull.sp.. | S..hirundo……Common.tern. | S..arctica……Arctic.tern. | S..dougallii……Roseate.tern. | S..anaethetus……Bridled.tern. | S..fuscata……Sooty.tern. | S..sandvicensis……Sandwich.tern. | T..maximus……Royal.tern. | C..niger……Black.tern. | T..bergii……Crested.tern. | Terns……Tern.sp.. | A..stolidus……Brown.noddy. | U..aalge……Guillemot. | A..torda……Razorbill. | Alcidae.sp…….Alcidae.sp.. | Seabird.unident……Seabird..unidentified. | P..catodon……Sperm.whale. | M..novaeangliae……Humpback.whale. | B..physalus……Fin.whale. | B..borealis……Sei.whale. | B..acutorostrata……Minke.whale. | B..brydei……Bryde.s.whale. | G..melas……Long.finned.pilot.whale. | G..macrorhynchus……Short.finned.pilot.whale. | Globicephala.sp…….Pilot.whale.sp.. | Z..cavirostris……Cuvier.s.beaked.whale. | Beaked.whale……Beaked.whale.sp.. | Whale.unident……Whale..unidentified. | O..orca……Killer.whale. | L..australis……Peale.s.dolphin. | L..albirostris……White.beacked.dolphin. | Lagenorhynchus.sp…….Lagenorhynchus.sp.. | D..delphis……Common.dolphin. | S..frontalis……Atlantic.spotted.dolphin. | S..coeruleoalba……Striped.dolphin. | S..clymene……Clymene.dolphin. | T..truncatus……Bottlenose.dolphin. | G..griseus……Risso.s.dolphin. | S..bredanensis……Rough.toothed.dolphin. | S..longirostris……Spinner.dolphin. | Dolphin.unident……Dolphin..unidentified. | P..phocoena……Harbour.porpoise. | A..pusillus……South.African.fur.seal. | C..caretta……Loggerhead.sea.turtle. | C..mydas……Green.sea.turtle. | D..coriacea……Leatherback.sea.turtle. | Sea.turtles……Sea.turtle.sp.. | Manta.sp…….Manta.ray. | Ray……Ray. | Hammerhead.shark……Hammerhead.shark. | Shark……Shark. | Mola.mola……Sun.fish. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 135 | 2012-04-18T14:00 | -31.42 | -39.43 | 4661 | 9.6 | 8.8896 | 35.8645 | 23.0101 | 3.02 | 9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 143 | 2012-04-19T09:00 | -28.98 | -39.00 | 4330 | 10.6 | 9.8156 | 35.9608 | 24.6779 | 2.71 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 144 | 2012-04-19T09:30 | -28.89 | -39.00 | 4196 | 10.7 | 9.9082 | 36.1643 | 24.8572 | 2.82 | 8 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 145 | 2012-04-19T10:00 | -28.80 | -39.00 | 4068 | 10.6 | 9.8156 | 36.0574 | 24.7066 | 2.84 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 146 | 2012-04-19T10:30 | -28.70 | -39.00 | 3916 | 10.6 | 9.8156 | 35.9939 | 24.6284 | 2.84 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
polar %>% mutate(temp_high_23 = ifelse(Temp...C...Mid.mean.surface.water.temper.... >= 23, TRUE, FALSE)) %>%
filter(temp_high_23 ==TRUE) ##creating a new column that shows which temp are greater than 23 - makes a new column in order to do the same thing as the first codeEjercicio 5
En este ejercicio, vas a manipular la estructura de datos “parrot”.
a) Elimina las especies que no tienen ocurrencias y también elimina la información que no vamos a utilizar: “longitud” (Longitude), “latitud” (Latitude) y “tiempo en minutos” (Time..min.).
b) Reemplaza los puntos en los nombres de especies por guiones utilizando la función str_replace().
c) Ahora que hemos manipulado la estructura de datos a nuestro gusto, crea un gráfico de barras (bar graph) visualizando la suma de abundancia para cada especie.
Haz clic aquí para solución!
| Longitude | Latitude | Code | Time..min. | Date.Time | A..amazonica…. | A..autumnalis…. | A..barbadensis…. | A..dufresniana…. | A..farinosa…. | A..festiva…. | A..mercenaria…. | A..ochrocephala…. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -72.54740 | 10.31623 | NM05 | 3 | 2010-03-15T11:13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.54267 | 10.31252 | NM05 | 3 | 2010-03-15T11:06 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53757 | 10.31035 | NM05 | 3 | 2010-03-15T10:59 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53145 | 10.30940 | NM05 | 3 | 2010-03-15T10:54 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.52523 | 10.30667 | NM05 | 3 | 2010-03-15T10:46 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
parrot_clean_wrangle <- parrot %>%
select(-`A..dufresniana....`, -`A..festiva....`, -`A..autumnalis....`, -`A..mercenaria....`) %>%
select(-Longitude, -Latitude, -`Time..min.`) %>%
rename(site = Code)
colnames(parrot_clean_wrangle) <- str_replace(str_remove_all(colnames(parrot_clean_wrangle), "\\.\\.\\.\\."), "\\.\\.", "_")
head(parrot_clean_wrangle)| site | Date.Time | A_amazonica | A_barbadensis | A_farinosa | A_ochrocephala |
|---|---|---|---|---|---|
| NM05 | 2010-03-15T11:13 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T11:06 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:59 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:54 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:46 | 0 | 0 | 0 | 0 |
parrot_clean_filter <- parrot_clean_wrangle %>% filter((A_amazonica != 0 | A_barbadensis != 0 | A_farinosa != 0 | A_ochrocephala != 0))parrot_clean_filter %>%
pivot_longer(names_to = "Species", values_to = "Abundance", A_amazonica:A_ochrocephala) %>%
group_by(Species) %>%
summarise(total_abundance = sum(Abundance)) %>%
ggplot(aes(x = Species, y = total_abundance)) + geom_bar(stat = "identity")